/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* ***** BEGIN LICENSE BLOCK *****
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
*
* The contents of this file are subject to the Mozilla Public License Version
* 1.1 (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
* http://www.mozilla.org/MPL/
*
* Software distributed under the License is distributed on an "AS IS" basis,
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
* for the specific language governing rights and limitations under the
* License.
*
* The Initial Developer of the Original Code is
*   Nick Kreeger
* Portions created by the Initial Developer are Copyright (C) 2006-2007
* the Initial Developer. All Rights Reserved.
*
* Contributor(s):
*   Nick Kreeger <nick.kreeger@park.edu>
*
* Alternatively, the contents of this file may be used under the terms of
* either the GNU General Public License Version 2 or later (the "GPL"), or
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
* in which case the provisions of the GPL or the LGPL are applicable instead
* of those above. If you wish to allow use of your version of this file only
* under the terms of either the GPL or the LGPL, and not to allow others to
* use your version of this file under the terms of the MPL, indicate your
* decision by deleting the provisions above and replace them with the notice
* and other provisions required by the GPL or the LGPL. If you do not delete
* the provisions above, a recipient may use your version of this file under
* the terms of any one of the MPL, the GPL or the LGPL.
*
* ***** END LICENSE BLOCK ***** */

#ifndef __CHMsgComposeWindow_h_
#define __CHMsgComposeWindow_h_

#import "CHMsgComposeService.h"
#import "nsIMsgQuote.h"
#import "nsIMsgCompose.h"
#import "nsIMsgComposeParams.h"
#import "nsIMsgIdentity.h"
#import "nsIMsgProgress.h"
#import "nsIMsgSendListener.h"
#import "nsIMsgWindow.h"
#import "nsIWebProgressListener.h"
#import "nsIMsgProgress.h"
#import "nsIDOMWindowInternal.h"
#import "CHBrowserView.h"
#import "CompositionWindowController.h"

class CHMsgComposeStateListener;
class CHMsgSendListener;
class CHMsgProgress;

class CHMsgComposeWindow : public nsISupports
{
public:
  CHMsgComposeWindow();
  virtual ~CHMsgComposeWindow();
  
  NS_DECL_ISUPPORTS
    
  void Initialize(nsIMsgComposeParams* aMsgComposeParam,
                  id<ComposerStateListenerDelegate> aListenerDelegate,
                  CHBrowserView* aBrowserView);
  
  void SendMessage();
  void AbortSend();
  void WindowWillClose();
  
  NSString* GetToLiteral();
  NSString* GetCcLiteral();
  NSString* GetSubject();
  NSString* GetBodyLiteral();
  
  void SetToLiteral(NSString* inToField);
  void SetCcLiteral(NSString* inCcField);
  void SetSubject(NSString* inSubjectField);
  void SetBodyLiteral(NSString* inBodyField);
  void SetForcePlainText(BOOL inShouldForcePlainText);
  
  void AddAttachment(NSURL* aUrl);
  void RemoveAttachment(NSURL* aUrl);
  
  /**
   * Returns an array of |Attachment| objects.
   * @return An array containing |Attachment| objects, or nil if there is an empty list.
   */
  NSArray* GetAttachmentArray();
  
protected:
  id<ComposerStateListenerDelegate> GetComposerStateListener();
  nsresult GetMsgWindow(nsIMsgWindow** aMsgWindow);
  void OnComposeBodyReady();
  
private:
  nsCOMPtr<nsIMsgCompose>           mMsgCompose;
  nsCOMPtr<nsIMsgComposeParams>     mMsgComposeParams;
  nsCOMPtr<nsIMsgQuote>             mQuote;
  nsCOMPtr<nsIMsgIdentity>          mIdentity;
  nsCOMPtr<nsIMsgWindow>            mMsgWindow;
  
  CHMsgComposeStateListener*        mMsgComposeStateListener;
  CHMsgSendListener*                mMsgSendListener;
  CHMsgProgress*                    mMsgProgress;
  
  CHQuotingOutputStreamListener*    mQuotingOutputStreamListener;  // strong ref
  id<ComposerStateListenerDelegate> mListenerDelegate;             // weak ref
  
  
  friend class CHMsgComposeStateListener;
  friend class CHMsgSendListener;
  friend class CHMsgProgress;
};

#endif
